# -*- coding: utf-8 -*-
 ##############################################
 ##                                            ##
 ##                Tools module                 ##
 ##                                             ##
 ##                                             ##
 ##              from Basiq Series              ##
 ##           by Críptidos Digitales            ##
 ##                 GPL (c)2008                 ##
  ##                                            ##
    ##############################################

"""
"""

from PyQt4 import QtCore, QtGui
import os
import herramientas_ui

from cdWidgets import cdSlideFrame

import access

from baseModel import *



class Forma(QtGui.QFrame):

    @property
    def owner(self):
        return self.__owner


    def __init__(self, *args, **kwds):
        QtGui.QFrame.__init__(self, *args)

        if kwds.has_key('owner'):
            self.__owner = kwds.pop('owner')
        else:
            self.__owner = None

        self.ui = herramientas_ui.Ui_Form()
        self.ui.setupUi(self)

        font = QtGui.QFont()
        font.setBold(True)
        font.setPointSize(9)

        self.ui.title.setText(u"HERRAMIENTAS")
        self.ui.title.setStyleSheet("background-color:#F8F8F8;")

        self.ui.frGeneral.setStyleSheet("""#frGeneral{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        ## Ubicación de documentos
        self.ui.frRutaDocumentos.setStyleSheet("""#frRutaDocumentos{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            font: bold;
            }""")
        self.ui.laRutaDocumentos.setStyleSheet("color:#5F0000; background-color:#E0E0C0;")
        self.ui.edRutaDocumentos.setText(getAttribute(grupo=u'sistema', nombre=u'rutaDocumentos')['valor'])
        self.connect(self.ui.boRutaDocumentos, QtCore.SIGNAL('clicked()'), self.showPath)

        ## Ubicacion de datos
        #~ self.ui.edRuta.setText(self.app.config.pull('properties', 'ubicacion'))
        #~ self.connect(self.ui.boRuta, QtCore.SIGNAL('clicked()'), self.muestraDialogo)

        ## Mostrar tips al inicio
        if getAttribute(grupo=u'sistema', nombre=u'mostrarTips')['valor']==u"1":
            self.ui.chMostrarTips.setChecked(True)
        else:
            self.ui.chMostrarTips.setChecked(False)
        self.connect(self.ui.chMostrarTips, QtCore.SIGNAL('stateChanged(int)'), self.toggleMostrarTips)

        self.ui.laDecimales.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")

        ## Lugar default
        self.ui.laLugar.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")
        self.ui.cbLugarDefault.clear()
        for lugar in getLugares():
            self.ui.cbLugarDefault.addItem(lugar['nombre'], QtCore.QVariant(lugar['code']))
        default = getAttribute(grupo=u'lugar', valor=u'default')
        if default['valor']:
            self.ui.cbLugarDefault.setCurrentIndex(self.ui.cbLugarDefault.findData(QtCore.QVariant(int(default['code']))))
        self.connect(self.ui.cbLugarDefault, QtCore.SIGNAL('currentIndexChanged(int)'), self.lugarDefaultChanged)

        ## Proteccion F10
        if getAttribute(grupo=u'sistema', nombre=u'proteccionF10')['valor']:
            self.ui.chF10.setChecked(True)
        else:
            self.ui.chF10.setChecked(False)
        self.connect(self.ui.chF10,QtCore.SIGNAL('stateChanged(int)'), self.toggleProteccionF10)

        self.ui.frContrasenas.setStyleSheet("""#frContrasenas{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        self.ui.laContrasenas.setStyleSheet("""#laContrasenas{
            border-width: 0px;
            border-top-left-radius: 9px;
            border-top-right-radius: 9px;
            color:#5F0000;
            background-color:#E0E0C0;
            }""")


        ## Contraseñas
        self.connect(self.ui.boContrasena, QtCore.SIGNAL('clicked()'), self.cambiarContrasena)

        self.chContrasenaChecked = False
        if getAttribute(grupo=u'sistema', nombre=u'contrasenaHerramientas')['referencia']:
            self.ui.chContrasenaHerramientas.setChecked(True)
            self.chContrasenaChecked = True
        else:
            self.ui.chContrasenaHerramientas.setChecked(False)
        self.connect(self.ui.chContrasenaHerramientas, QtCore.SIGNAL('stateChanged(int)'), self.toggleContrasenaHerramientas)

        if getAttribute(grupo=u'sistema', nombre=u'contrasenaMantenimiento')['referencia']:
            self.ui.chContrasenaMantenimiento.setChecked(True)
            self.chContrasenaChecked = True
        else:
            self.ui.chContrasenaMantenimiento.setChecked(False)
        self.connect(self.ui.chContrasenaMantenimiento, QtCore.SIGNAL('stateChanged(int)'), self.toggleContrasenaMantenimiento)

        self.connect(self.ui.boHerramientasMantenimiento, QtCore.SIGNAL('clicked()'), self.cambiarHerramientasMantenimiento)
        if self.chContrasenaChecked:
            self.ui.boHerramientasMantenimiento.setEnabled(True)
        else:
            self.ui.boHerramientasMantenimiento.setEnabled(False)

        # self.ui.tabCuentas.setStyleSheet("""background-color: #E0E0C0;""")

        self.ui.frCuentas.setStyleSheet("""#frCuentas{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        self.ui.laCuentas.setStyleSheet("""#laCuentas{
            border-width: 0px;
            border-top-left-radius: 9px;
            border-top-right-radius: 9px;
            color:#5F0000;
            background-color:#E0E0C0;
            }""")

        self.ui.listaCuentas.setStyleSheet("""#listaCuentas{
            border-style: solid;
            border-width: 1px;
            border-top-color: #A0A0A0;
            border-left-color: #A0A0A0;
            border-right-color: #FFFFFF;
            border-bottom-color: #FFFFFF;
            background-color: #FFFFE0;
            }""")

        ## Cuentas - Quitar
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Minus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aEliminar = QtGui.QAction(icon, u"Eliminar", self)
        self.aEliminar.setCheckable(True)
        self.aEliminar.setIconText(u"&Eliminar")
        self.connect(self.aEliminar, QtCore.SIGNAL("triggered()"), self.eliminaCuenta)

        self.ui.toQuitarCuenta.setDefaultAction(self.aEliminar)
        self.ui.toQuitarCuenta.setIconSize(QtCore.QSize(32, 32))
        self.ui.toQuitarCuenta.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)

        ## Cuentas - Modificar
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Redo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aModificar = QtGui.QAction(icon, u"Modificar", self)
        self.aModificar.setCheckable(True)
        self.aModificar.setIconText(u"&Modificar")
        self.connect(self.aModificar, QtCore.SIGNAL("triggered()"), self.modificaCuenta)

        self.ui.toModificarCuenta.setDefaultAction(self.aModificar)
        self.ui.toModificarCuenta.setIconSize(QtCore.QSize(32, 32))
        self.ui.toModificarCuenta.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)

        ## Cuentas - Agregar
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aAgregar = QtGui.QAction(icon, u"Agregar", self)
        self.aAgregar.setCheckable(True)
        self.aAgregar.setIconText(u"&Agregar")
        self.connect(self.aAgregar, QtCore.SIGNAL("triggered()"), self.agregaCuenta)

        self.ui.toAgregarCuenta.setDefaultAction(self.aAgregar)
        self.ui.toAgregarCuenta.setIconSize(QtCore.QSize(32, 32))
        self.ui.toAgregarCuenta.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)

        # self.connect(self.ui.edCuenta, QtCore.SIGNAL('editingFinished()'), self.cuentaCapturada)

        self.ui.laBanco.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")
        self.ui.cbBanco.setFont(font)
        self.ui.cbBanco.setStyleSheet("color:#5F0000;")

        self.ui.laNumero.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")
        self.ui.edCuenta.setFont(font)
        self.ui.edCuenta.setStyleSheet("color:#5F0000;")

        self.cargaBancos()

        self.cargaCuentas()

        # self.ui.frameCapturaCuenta.hide()


        self.ui.frProductos.setStyleSheet("""#frProductos{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        ## Productos - Captura de Clasificación Obligatoria
        self.ui.chCapturaClasificacionObligatoria.setFont(font)
        self.ui.chCapturaClasificacionObligatoria.setChecked(not not getAttribute(grupo=u'producto', nombre=u'capturaClasificacionObligatoria')['valor'])
        self.connect(self.ui.chCapturaClasificacionObligatoria, QtCore.SIGNAL('stateChanged(int)'), self.toggleCapturaClasificacionObligatoria)

        ## Productos - Captura de Linea Habilitada
        self.ui.chCapturaLinea.setFont(font)
        self.ui.chCapturaLinea.setChecked(not not getAttribute(grupo=u'producto', nombre=u'capturaLineaHabilitada')['valor'])
        self.connect(self.ui.chCapturaLinea, QtCore.SIGNAL('stateChanged(int)'), self.toggleCapturaLinea)

        ## Productos - Captura de Inventario Actual Permitida
        self.ui.chCapturaActualPermitida.setFont(font)
        self.ui.chCapturaActualPermitida.setChecked(not not getAttribute(grupo=u'producto', nombre=u'capturaActualPermitida')['valor'])
        self.connect(self.ui.chCapturaActualPermitida, QtCore.SIGNAL('stateChanged(int)'), self.toggleCapturaActualPermitida)

        ## Productos - Usar codigo de barras
        print getAttributes()

        self.ui.chUseBarCode_product.setChecked(not not getAttribute(grupo=u'producto', nombre=u'useBarCode')['valor'])
        self.connect(self.ui.chUseBarCode_product, QtCore.SIGNAL('stateChanged(int)'), self.toggleUseBarCode_product)

        ## Productos - Usar codigo secundario
        self.ui.chUsarCodigoSecundario.setChecked(not not getAttribute(grupo=u'producto', nombre=u'usarCodigoSecundario')['valor'])
        self.connect(self.ui.chUsarCodigoSecundario, QtCore.SIGNAL('stateChanged(int)'), self.toggleUsarCodigoSecundario)

        ## Productos - Tipo default en Captura
        self.ui.laTipoDefaultProducto.setFont(font)
        self.ui.laTipoDefaultProducto.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")
        self.ui.cbTipoProducto.setFont(font)
        self.ui.cbTipoProducto.setStyleSheet("color:#5F0000; background-color:#FFFFFF;")
        self.connect(self.ui.cbTipoProducto, QtCore.SIGNAL('activated(int)'), self.changeTipoProductoDefault)

        self.cargaTiposProducto()
        self.ui.cbTipoProducto.setCurrentIndex(self.ui.cbTipoProducto.findData(QtCore.QVariant(int(getAttribute(grupo=u'tipoProducto', valor=u'default')['id']))))

        ## Productos - tipos de Precio
        self.ui.frPrecios.setStyleSheet("""#frPrecios{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        self.ui.laPrecios.setStyleSheet("""#laPrecios{
            border-width: 0px;
            border-top-left-radius: 9px;
            border-top-right-radius: 9px;
            color:#5F0000;
            background-color:#E0E0C0;
            }""")

        rangos = getAttributes(grupo=u'rangoPrecioProducto', order=u'referencia')

        font = QtGui.QFont()
        font.setWeight(50)
        font.setBold(False)

        self.ui.priceTypeCH = []
        self.ui.priceTypeED = []

        for index, rango in enumerate(rangos):

            horizontalLayout = QtGui.QHBoxLayout()
            horizontalLayout.setSpacing(0)
            horizontalLayout.setContentsMargins(3, -1, -1, -1)

            self.ui.priceTypeCH.append(QtGui.QCheckBox(self.ui.frTiposPrecio))
            self.ui.priceTypeCH[index].setFont(font)
            self.ui.priceTypeCH[index].setObjectName("priceTypeCH")

            if rango['referencia'][1]==u'a':
                self.ui.priceTypeCH[index].setChecked(True)

            self.ui.priceTypeCH[index].data = rango['id']

            self.connect(self.ui.priceTypeCH[index], QtCore.SIGNAL('stateChanged(int)'), self.changedStateTipoPrecio)

            horizontalLayout.addWidget(self.ui.priceTypeCH[index])

            self.ui.priceTypeED.append(QtGui.QLineEdit(self.ui.frTiposPrecio))
            self.ui.priceTypeED[index].setFrame(False)
            self.ui.priceTypeED[index].setFont(font)
            self.ui.priceTypeED[index].setReadOnly(True)
            self.ui.priceTypeED[index].setObjectName("priceTypeED")

            self.ui.priceTypeED[index].setText(rango['nombre'])
            self.ui.priceTypeED[index].data = QtCore.QVariant(rango['id'])

            self.connect(self.ui.priceTypeED[index], QtCore.SIGNAL('editingFinished()'), self.changedNameTipoPrecio)

            horizontalLayout.addWidget(self.ui.priceTypeED[index])

            self.ui.lyTiposPrecio.insertLayout(index, horizontalLayout)

        ## Productos - Recálculo de precios al comprar
        recalcular = not not getAttribute(grupo=u'producto', nombre=u'recalcularPrecioAlComprar')['valor']
        sentido = getAttribute(grupo=u'producto', nombre=u'sentidoDeCambio')['valor']
        margen = getAttribute(grupo=u'producto', nombre=u'margenDeCambio')['valor']

        self.ui.chRecalcularPrecio.setChecked(recalcular)
        if sentido == u'+/-':
            self.ui.raMasMenos.setChecked(True)
        elif sentido == u'+':
            self.ui.raMas.setChecked(True)

        self.ui.spPorcentaje.setValue(int(margen))

        self.connect(self.ui.chRecalcularPrecio, QtCore.SIGNAL('toggled(bool)'), self.toggleRecalcular)
        self.connect(self.ui.raMasMenos, QtCore.SIGNAL('toggled(bool)'), self.sentidoChanged)
        self.connect(self.ui.spPorcentaje, QtCore.SIGNAL('valueChanged(int)'), self.porcentajeChanged)
        # self.connect(self.ui.grSentido, QtCore.SIGNAL('buttonClicked(QAbstractButton)'), self.sentidoChanged)



        ## --------------------------------------
        ## Para ventas

        self.ui.frVentas.setStyleSheet("""#frVentas{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        ## Ventas - Captura de Pago Obligatoria
        self.ui.chCapturaPagoObligatoria.setFont(font)
        self.ui.chCapturaPagoObligatoria.setChecked(not not getAttribute(grupo=u'ventas', nombre=u'capturaPagoObligatoria')['valor'])
        self.connect(self.ui.chCapturaPagoObligatoria, QtCore.SIGNAL('stateChanged(int)'), self.toggleCapturaPagoObligatoria)

        ## Ventas - Se imprime comprobante
        self.ui.chSeImprimeComprobante.setFont(font)
        self.ui.chSeImprimeComprobante.setChecked(not not getAttribute(grupo=u'ventas', nombre=u'seImprimeComprobante')['valor'])
        self.connect(self.ui.chSeImprimeComprobante, QtCore.SIGNAL('stateChanged(int)'), self.toggleSeImprimeComprobante)

        ## - - - -

        ## Para ventas - Use Own Code
        self.ui.chUseOwnCode.setChecked(not not getAttribute(grupo=u'ventas', nombre=u'useOwnCode')['valor'])
        self.connect(self.ui.chUseOwnCode, QtCore.SIGNAL('stateChanged(int)'), self.toggleUseOwnCode)

        ## Para ventas - Use Bar Code
        self.ui.chUseBarCode_venta.setChecked(not not getAttribute(grupo=u'ventas', nombre=u'useBarCode')['valor'])
        self.connect(self.ui.chUseBarCode_venta, QtCore.SIGNAL('stateChanged(int)'), self.toggleUseBarCode_venta)

        ## Para ventas - Use Auxiliary Code
        self.ui.chUseAuxiliaryCode.setChecked(not not getAttribute(grupo=u'ventas', nombre=u'useAuxiliaryCode')['valor'])
        self.connect(self.ui.chUseAuxiliaryCode, QtCore.SIGNAL('stateChanged(int)'), self.toggleUseAuxiliaryCode)

        ## Para ventas - Use Line
        self.ui.chUseLine.setChecked(not not getAttribute(grupo=u'ventas', nombre=u'useLine')['valor'])
        self.connect(self.ui.chUseLine, QtCore.SIGNAL('stateChanged(int)'), self.toggleUseLine)

        ## - - - -

        ## Ventas - Focus for product selection
        self.ui.laSeleccionProducto.setFont(font)
        self.ui.laSeleccionProducto.setStyleSheet("color:#5F0000; background-color: #FFFFE0;")

        self.ui.raFocusCodigo.setChecked(not not getAttribute(grupo=u'ventas', nombre=u'focusEnSeleccionDeProducto')['valor'])


        ## Configuracion General
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aGenerales = QtGui.QAction(icon, u"Generales", self)
        self.aGenerales.setCheckable(True)
        self.aGenerales.setIconText(u"&Configuración\nGeneral")
        self.connect(self.aGenerales, QtCore.SIGNAL("triggered()"), self.generales)

        self.ui.toGenerales.setDefaultAction(self.aGenerales)
        self.ui.toGenerales.setIconSize(QtCore.QSize(44, 40))
        self.ui.toGenerales.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        ## Respaldos
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Redo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aRespaldos = QtGui.QAction(icon, u"Respaldos", self)
        self.aRespaldos.setCheckable(True)
        self.aRespaldos.setIconText(u"&Respaldos")
        self.connect(self.aRespaldos, QtCore.SIGNAL("triggered()"), self.respaldos)

        self.ui.toRespaldos.setDefaultAction(self.aRespaldos)
        self.ui.toRespaldos.setIconSize(QtCore.QSize(44,40))
        self.ui.toRespaldos.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        ##    Agregar respaldo
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aAgregarRespaldo = QtGui.QAction(icon, u"Crear", self)
        self.aAgregarRespaldo.setCheckable(True)
        self.aAgregarRespaldo.setIconText(u"Agregar")
        self.connect(self.aAgregarRespaldo, QtCore.SIGNAL("triggered()"), self.agregarRespaldo)

        self.ui.toAgregarRespaldo.setDefaultAction(self.aAgregarRespaldo)
        self.ui.toAgregarRespaldo.setIconSize(QtCore.QSize(44, 40))
        self.ui.toAgregarRespaldo.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        ##    Recuperar respaldo
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Undo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aRecuperarRespaldo = QtGui.QAction(icon, u"Crear", self)
        self.aRecuperarRespaldo.setCheckable(True)
        self.aRecuperarRespaldo.setIconText(u"Recuperar")
        self.connect(self.aRecuperarRespaldo, QtCore.SIGNAL("triggered()"), self.recuperarRespaldo)

        # font.setPointSize(7)
        # self.ui.toRecuperarRespaldo.setFont(font)
        self.ui.toRecuperarRespaldo.setDefaultAction(self.aRecuperarRespaldo)
        self.ui.toRecuperarRespaldo.setIconSize(QtCore.QSize(44, 40))
        self.ui.toRecuperarRespaldo.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        ##    Eliminar respaldo
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Minus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aEliminarRespaldo = QtGui.QAction(icon, u"Eliminar", self)
        self.aEliminarRespaldo.setCheckable(True)
        self.aEliminarRespaldo.setIconText(u"Eliminar")
        self.connect(self.aEliminarRespaldo, QtCore.SIGNAL("triggered()"), self.eliminarRespaldo)

        self.ui.toEliminarRespaldo.setDefaultAction(self.aEliminarRespaldo)
        self.ui.toEliminarRespaldo.setIconSize(QtCore.QSize(44, 40))
        self.ui.toEliminarRespaldo.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        self.ui.toSugerencias.hide()

        self.connect(self.parent(), QtCore.SIGNAL('mostrarTipsChangedBroadscast()'), self.mostrarTipsChangedBroadcast)



    def changedNameTipoPrecio(self):
        print 1002


    def changedStateTipoPrecio(self, state):
        referencia = getAttribute(id=self.sender().data)['referencia']
        if state:
            referencia = referencia.replace('i', 'a')
        else:
            referencia = referencia.replace('a', 'i')

        setAttribute(id=self.sender().data, referencia=referencia)

        self.owner.emit(QtCore.SIGNAL('priceRulesChanged()'))


    def sentidoChanged(self, checked):  # print "herramientas.Forma.sentidoChanged()"
        if self.ui.raMasMenos.isChecked():
            setAttribute(grupo=u'producto', nombre=u'sentidoDeCambio', valor=u'+/-')
        elif self.ui.raMas.isChecked():
            setAttribute(grupo=u'producto', nombre=u'sentidoDeCambio', valor=u'+')


    def porcentajeChanged(self, porcentaje):
        setAttribute(grupo=u'producto', nombre=u'margenDeCambio', valor=u"%s" % porcentaje)


    def rangosPrecioChanged(self):
        if self.sender().isChecked():
            indicador = 'a'
        else:
            indicador = 'i'
        setAttribute(id=self.sender().rango.id, referencia=self.sender().rango.referencia[0]+indicador)
        self.owner.emit(QtCore.SIGNAL('rangosPrecioChangedBroadcast()'))


    #### CUENTAS ####

    def agregaCuenta(self):     # print "herramientas.Forma.agregaCuenta()"

        propio = manejador.rolI(tipo=u'propio')
        bancoId = self.ui.cbBanco.itemData(self.ui.cbBanco.currentIndex()).toInt()[0]
        numeroCuenta = unicode(self.ui.edCuenta.text())

        if bancoId != -1 and numeroCuenta:
            manejador.atributoRolI(rol_id=propio.id, nombre=u'cuenta', valor=unicode(numeroCuenta), referencia=unicode(bancoId))

            self.cargaCuentas()

            session.eventRouter.emit(QtCore.SIGNAL('cuentasChanged()'))


    def cargaCuentas(self):
        propio = getRol(tipo=u'propio')
        atributos = getAll('atributosrol', rol_id=propio['id'])
        cuentas = [x for x in atributos if x['nombre']==u'cuenta']
        self.ui.listaCuentas.clear()

        for index, cuenta in enumerate(cuentas):
            banco = getRol(id=int(cuenta['referencia']))

            item = QtGui.QListWidgetItem("%s %s" % (cuenta['valor'], banco['alias']))
            item.setData(QtCore.Qt.UserRole, QtCore.QVariant(cuenta['id']))
            self.ui.listaCuentas.addItem(item)


    def eliminaCuenta(self):
        # print "herramientas.Forma.eliminaCuenta()"
        cuentaId = self.ui.listaCuentas.item(self.ui.listaCuentas.currentRow()).data(QtCore.Qt.UserRole).toInt()[0]
        manejador.eliminaCuenta(cuentaId)
        self.cargaCuentas()
        session.eventRouter.emit(QtCore.SIGNAL('cuentasChanged()'))


    def modificaCuenta(self):
        # print "herramientas.Forma.modificaCuenta()"
        self.modoCapturaCuenta = u'modificar'
        if self.ui.listaCuentas.currentRow() != -1:
            item = self.ui.listaCuentas.item(self.ui.listaCuentas.currentRow())
            banco, numero = unicode(item.text()).split(' ')
            self.ui.cbBanco.setEditText(banco)
            self.ui.edCuenta.setText(numero)
            self.ui.frameCapturaCuenta.show()

        session.eventRouter.emit(QtCore.SIGNAL('cuentasChanged()'))


    def agregaRangoPrecio(self):
        # print "herramientas.Forma.agregaRangoPrecio()"
        index = len(self.ui.edRangosPrecio) - 1
        nombre = unicode(self.ui.edRangosPrecio[index].text())
        referencia = u"%s" % index
        setAttribute(grupo=u'rangoPrecioProducto', nombre=nombre, referencia=referencia)
        self.ui.edRangosPrecio[index].setReadOnly(True)

    def agregaCapturaRangoPrecio(self):
        count = len(self.ui.edRangosPrecio)
        if count < 5:
            self.ui.edRangosPrecio.append(QtGui.QLineEdit(""))
            self.ui.lyNumeroRangosPrecio.addWidget(QtGui.QLabel("%s" % (count+1)))
            self.ui.lyRangosPrecio.addWidget(self.ui.edRangosPrecio[count])
            self.connect(self.ui.edRangosPrecio[count], QtCore.SIGNAL('editingFinished()'), self.agregaRangoPrecio)

    def agregarRespaldo(self):
        print "herramientas.Forma.agregarRespaldo()"

    def recuperarRespaldo(self):
        print "herramientas.Forma.recuperarRespaldo()"

    def cambiarContrasena(self):
        formaContrasena = access.FormaContrasena(app=session.app)
        result = formaContrasena.exec_()
        # formaAcceso.setData(formaContrasena.ui.edContrasena.text())

    def cambiarHerramientasMantenimiento(self):
        formaContrasena = access.Form(app=session.app, mode=u'herramientas')
        result = formaContrasena.exec_()


    def cargaBancos(self):
        self.ui.cbBanco.clear()
        bancos = getRoles(tipo=u'banco')
        # bancos = manejador.dameBancos()
        for banco in bancos:
            self.ui.cbBanco.addItem(banco['nombre'], QtCore.QVariant(banco['id']))
        self.ui.cbBanco.setCurrentIndex(-1)


    def cargaTiposProducto(self):
        self.ui.cbTipoProducto.clear()
        tipos = getAttributes(grupo=u'tipoProducto')
        for item in tipos:
            self.ui.cbTipoProducto.addItem(item['nombre'], QtCore.QVariant(item['id']))


    def changeTipoProductoDefault(self, index): # print "herramientas.Forma.changeTipo()"
        setAttribute(grupo=u'tipoProducto', nombre=u'default', valor=u"%s" % self.ui.cbTipoProducto.itemData(self.ui.cbTipoProducto.currentIndex()))
        self.owner.emit(QtCore.SIGNAL('tipoProductoDefaultChangedBroadcast'))


    def cuentaCapturada(self):
        # print "herramientas.Forma.cuentaCapturada()"
        f=g
        #! refactorizar
        if self.ui.cbBanco.currentText():
            if self.modoCapturaCuenta==u'agregar':
                cuentas = manejador.dameCuentas()

                if "%s %s" % (self.ui.cbBanco.currentText(), self.ui.edCuenta.text()) not in cuentas:
                    cuentas.append("%s %s" % (self.ui.cbBanco.currentText(), self.ui.edCuenta.text()))
                    manejador.ponCuentas(cuentas)
                    self.ui.listaCuentas.addItem("%s %s" % (self.ui.cbBanco.currentText(), self.ui.edCuenta.text()))
                    self.owner.emit(QtCore.SIGNAL('cuentasChangedBroadcast()'))

        self.ui.frameCapturaCuenta.hide()


    def eliminarRespaldo(self):
        print "herramientas.Forma.eliminarRespaldo()"


    def lugarDefaultChanged(self, index):
        setAttribute(grupo=u'lugar', nombre=u'default', valor=u'%s' % self.ui.cbLugarDefault.itemData(self.ui.cbLugarDefault.currentIndex()).toInt()[0])


    def mostrarTipsChangedBroadcast(self):
        if getAttribute(grupo=u'sistema', nombre=u'mostrarTips')['valor'] == u"1":
            self.ui.chMostrarTips.setChecked(True)
        else:
            self.ui.chMostrarTips.setChecked(False)


    def showPath(self):
        filename = QtGui.QFileDialog.getExistingDirectory(self, u"Empresa Básica - Ubicación de documentos", self.ui.edRutaDocumentos.text(), QtGui.QFileDialog.ShowDirsOnly)
        self.ui.edRutaDocumentos.setText(filename)

        setAttribute(grupo=u'sistema', nombre=u'rutaDocumentos', valor=u'%s' % filename)


    def tipoPrecioModificado(self):
        print self.sender()
        atributo = manejador.atributoI(id=self.sender().data.toInt()[0])

        atributo.nombre = unicode(self.sender().text())
        manejador.session().commit()


    def toggleCapturaActualPermitida(self, state):
        # print "herramientas.Forma.toggleCapturaActualPermitida()"
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        setAttribute(grupo=u'producto', nombre=u'capturaActualPermitida', valor=valor)
        self.owner.emit(QtCore.SIGNAL('capturaActualPermitidaChangedBroadcast'))


    def toggleCapturaClasificacionObligatoria(self, state):
        # print "herramientaas.Forma.__toggleCapturaClasificacionObligatoria()"
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        setAttribute(grupo=u'producto', nombre=u'capturaClasificacionObligatoria', valor=valor)
        self.owner.emit(QtCore.SIGNAL('capturaClasificacionObligatoriaChangedBroadcast'))


    def toggleCapturaLinea(self, state):
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        setAttribute(grupo=u'producto', nombre=u'capturaLineaHabilitada', valor=valor)
        self.owner.emit(QtCore.SIGNAL('capturaLineaToggledBroadcast()'))


    def toggleCapturaPagoObligatoria(self, state):  # print "herramientas.Forma.toggleCapturaPagoObligatoria()", state
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        setAttribute(grupo=u'ventas', nombre=u'capturaPagoObligatoria', valor=valor)
        self.owner.emit(QtCore.SIGNAL('capturaPagoObligatoriaChanged'))


    def toggleContrasenaHerramientas(self, state):
        if state == QtCore.Qt.Checked:
            referencia = '1'
        else:
            referencia = ''
        setAttribute(grupo=u'sistema', nombre=u'contrasenaHerramientas', referencia=referencia)
        if not self.ui.chContrasenaHerramientas.isChecked() and not self.ui.chContrasenaMantenimiento.isChecked():
            self.ui.boHerramientasMantenimiento.setEnabled(False)
        else:
            self.ui.boHerramientasMantenimiento.setEnabled(True)


    def toggleContrasenaMantenimiento(self, state):
        if state == QtCore.Qt.Checked:
            reference = u"1"
        else:
            reference = u""
        setAttribute(grupo=u'sistema', nombre=u'contrasenaMantenimiento', reference=reference)
        if not self.ui.chContrasenaHerramientas.isChecked() and not self.ui.chContrasenaMantenimiento.isChecked():
            self.ui.boHerramientasMantenimiento.setEnabled(False)
        else:
            self.ui.boHerramientasMantenimiento.setEnabled(True)


    def toggleMostrarTips(self, state):
        # print "herramientas.Forma.toggleMostrarTips()", state
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        setAttribute(grupo=u'sistema', nombre=u'mostrarTips', valor=valor)
        # self.owner.emit(QtCore.SIGNAL('mostrarTipsChanged()'))


    def toggleProteccionF10(self, state):
        # print "herramientas.Forma.toggleProteccionF10()"
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        setAttribute(grupo=u'sistema', nombre=u'proteccionF10', valor=valor)
        self.owner.emit(QtCore.SIGNAL('proteccionF10Changed()'))


    def toggleRecalcular(self, checked):
        if checked:
            setAttribute(grupo=u'producto', nombre=u'recalcularPrecioAlComprar', valor=u'1')
        else:
            setAttribute(grupo=u'producto', nombre=u'recalcularPrecioAlComprar', valor=u'0')


    def toggleSeImprimeComprobante(self, state):
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""


    def toggleUsarCodigoSecundario(self, state):
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        setAttribute(grupo=u'ventas', nombre=u'usarCodigoSecundario', valor=valor)
        self.owner.emit(QtCore.SIGNAL('usarCodigoSecundarioChangedBroadcast()'))

    def toggleUseAuxiliaryCode(self, state):
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        setAttribute(grupo=u'ventas', nombre=u'useAuxiliaryCode', valor=valor)
        session.eventRouter.emit(QtCore.SIGNAL('useAuxiliaryCodeChanged()'))

    def toggleUseBarCode_product(self, state):
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        setAttribute(grupo=u'producto', nombre=u'useBarCode', valor=valor)
        session.eventRouter.emit(QtCore.SIGNAL('useBarCodeChanged_product()'))

    def toggleUseBarCode_venta(self, state):
        print "herramientas.Forma.toggleUseBarCode_venta()"
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        setAttribute(grupo=u'ventas', nombre=u'useBarCode', valor=valor)
        session.eventRouter.emit(QtCore.SIGNAL('useBarCodeChanged_venta()'))

    def toggleUseLine(self, state):
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        setAttribute(grupo=u'ventas', nombre=u'useLine', valor=valor)
        session.eventRouter.emit(QtCore.SIGNAL('useLineChanged()'))


    def toggleUseOwnCode(self, state):
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        setAttribute(grupo=u'ventas', nombre=u'useOwnCode', valor=valor)
        session.eventRouter.emit(QtCore.SIGNAL('useOwnCodeChanged()'))


    def generales(self):
        self.ui.stack.setCurrentIndex(0)

    def respaldos(self):
        self.ui.stack.setCurrentIndex(1)




